07 de Junio, 2017

Contenido

  1. Customizar apariencia
    • HTML & CSS
  2. Extensiones a Shiny (mediante paquetes)

  3. Compartir las apps por internet

  4. MapEs (una app desarrollada por FISABIO - DG Salud Pública)

1. Customizar apariencia

HTML & CSS

Comandos HTML

Shiny acepta código HTML:
ui <- fluidPage(
  HTML("<h1>Título hecho con HTML</h1>")
)

# Definición del server
server <- function(input, output) {}

# App completa con los componentes ui y server
shinyApp(ui, server)
R permite añadir contenido a una página con las funciones tags
ui <- fluidPage(
  tags$h1("Título hecho con R")
)

# Definición del server
server <- function(input, output) {}

# App completa con los componentes ui y server
shinyApp(ui, server)

tags: h1() - h6()

Cabeceras

ui <- fluidPage(
  h1("Tamaño 1"),
  h2("Tamaño 2"),
  h3("Tamaño 3"),
  h4("Tamaño 4"),
  h5("Tamaño 5"),
  h6("Tamaño 6")
)

# Definición del server
server <- function(input, output) {}

# App completa con los componentes ui y server
shinyApp(ui, server)

tags: hr()

Línea horizontal

ui <- fluidPage(
  h3("texto"),
  hr(),
  h3("texto")
)

# Definición del server
server <- function(input, output) {}

# App completa con los componentes ui y server
shinyApp(ui, server)

tags: "Texto"

Texto normal. El texto plano sin modificadores no necesita tags.

ui <- fluidPage(
  "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed eiusmod tempor incidunt ut labore et dolore magna aliqua."
)

# Definición del server
server <- function(input, output) {}

# App completa con los componentes ui y server
shinyApp(ui, server)

tags: br()

Salto de línea

ui <- fluidPage(
  "Texto 1",
  br(),
  "Texto 2"
)

# Definición del server
server <- function(input, output) {}

# App completa con los componentes ui y server
shinyApp(ui, server)

tags: p()

Párrafo

ui <- fluidPage(
  p("Párrafo 1"),
  p("Párrafo 2")
)

# Definición del server
server <- function(input, output) {}

# App completa con los componentes ui y server
shinyApp(ui, server)

tags: em()

Itálica

ui <- fluidPage(
  em("itálica")
)

# Definición del server
server <- function(input, output) {}

# App completa con los componentes ui y server
shinyApp(ui, server)

tags: strong()

Negrita

ui <- fluidPage(
  strong("negrita")
)

# Definición del server
server <- function(input, output) {}

# App completa con los componentes ui y server
shinyApp(ui, server)

tags: code()

Texto monoespaciado

ui <- fluidPage(
  code("código")
)

# Definición del server
server <- function(input, output) {}

# App completa con los componentes ui y server
shinyApp(ui, server)

Los tags se pueden anidar unos dentro de otros.

ui <- fluidPage(
  p("Lorem ipsum dolor sit amet, ", strong("consectetur"), " adipiscing elit, ", em("sed eiusmod tempor incidunt ut labore et dolore magna aliqua."))
)

# Definición del server
server <- function(input, output) {}

# App completa con los componentes ui y server
shinyApp(ui, server)

Insertar un CSS

Las hojas de estilo en cascada (CSS) son un marco para personalizar la apariencia de elementos en una página web.

ui <- fluidPage(
  theme = "bootstrap.css",
  sidebarLayout(
    sidebarPanel(),
    mainPanel()
  )
)

# Definición del server
server <- function(input, output) {}

# App completa con los componentes ui y server
shinyApp(ui, server)
ui <- fluidPage(
  includeCSS("bootstrap.css"),
  sidebarLayout(
    sidebarPanel(),
    mainPanel()
  )
)

# Definición del server
server <- function(input, output) {}

# App completa con los componentes ui y server
shinyApp(ui, server)

2. Extensiones a Shiny (mediante paquetes)

2. Extensiones a Shiny (mediante paquetes)

  • Extensiones de formato

    • flexdashboard: Tableros interactivos fáciles para R (RMarkdown)
    • shinythemes: Temas CSS listos para usar con Shiny
    • shinydashboard: Tableros para Shiny
    • shinyjqui: Interacciones y efectos de animación para Shiny
  • Extensiones para cálculos/gráficos interactivos

    • htmlwidgets: Un marco para embeber visualizaciones de JavaScript en R

flexdashboard

  • Formalmente es un RMarkdown (documento interactivo) con elementos de Shiny
  • Muy buena combinación con Github
  • Redes sociales (Twitter, Facebook, Google+, LinkedIn and Pinterest)
  • Posibilidad de incrustar código

flexdashboard

shinythemes

## app.R ##
library(shinythemes)

shinyApp(
  ui = fluidPage(theme = shinytheme("united"),
    ...
  ),
  server = function(input, output) { }
)

shinydashboard




## app.R ##
library(shiny)
library(shinydashboard)

ui <- dashboardPage(
  dashboardHeader(),
  dashboardSidebar(),
  dashboardBody()
)

server <- function(input, output) { }

shinyApp(ui, server)
  • Diferentes colores (skins) para el tema
  • Utilización de iconos 1 y 2

shinyjqui

htmlwidgets

85 widgets registrados actualmente (selección):

  • leaflet: Mapeado geoespacial interactivo
  • plotly: Creación de gráficos interactivos
  • dygraphs: Graficado de series temporales
  • networkD3: Visualización gráfica de datos con D3
  • DataTables: Visualización de datos tabulares
  • d3heatmap: Mapas de calor
  • DiagrammeR: Grafos y diagramas de flujo
  • rglwidget: Renderiza escenas creadas con rgl

Leaflet: mapas interactivos

  • Llamadas en Shiny: renderLeaflet() y leafletOutput()
  • Tiles
library(leaflet)
leaflet() %>% addTiles() %>% addMarkers(lng=-0.3531, lat=39.4815, popup="FISABIO")

Plotly: Navaja suiza de gráficos interactivos

  • Llamadas en Shiny: renderPlotly() y plotlyOutput()
library(ggplot2, plotly)
p <- ggplot(data = diamonds, aes(x = cut, fill = clarity)) + geom_bar(position = "dodge")
ggplotly(p)

dygraphs: Gráficos interactivos para series temporales

  • Llamadas en Shiny: renderDygraph() y dygraphOutput()
library(dygraphs)
lungDeaths <- cbind(ldeaths, mdeaths, fdeaths)
dygraph(lungDeaths, main = "Deaths from Lung Disease (UK)") %>%
  dyHighlight(highlightCircleSize = 5, 
              highlightSeriesBackgroundAlpha = 0.2,
              hideOnMouseOut = FALSE)

networkD3: Grafos interactivos

  • Llamadas en Shiny: renderForceNetwork() y forceNetworkOutput()
library(networkD3)
data(MisLinks, MisNodes)
forceNetwork(Links = MisLinks, Nodes = MisNodes, Source = "source", Target = "target", Value = "value", NodeID = "name", Group = "group", opacity = 0.4)

DataTable, paquete DT

  • Llamadas en Shiny: renderDataTable() y dataTableOutput()
DT::datatable(iris, options = list(pageLength = 3, dom = "pt", language = list(url = '//cdn.datatables.net/plug-ins/1.10.11/i18n/Spanish.json')), rownames = FALSE, escape = FALSE)

d3heatmap

  • Llamadas en Shiny: renderD3heatmap() y d3heatmapOutput()
library(d3heatmap)
d3heatmap(mtcars, scale = "column", colors = "Spectral")

DiagrammeR

rglwidget

library(rgl, rglwidget, htmltools)

theta <- seq(0, 6*pi, len=100)
xyz <- cbind(sin(theta), cos(theta), theta)
lineid <- plot3d(xyz, type="l", alpha = 1:0, lwd = 5, col = "blue")["data"]

browsable(tagList(
  rglwidget(elementId = "example", width = 500, height = 400,
            controllers = "player"),
  playwidget("example", 
             ageControl(births = theta, ages = c(0, 0, 1),
                        objids = lineid, alpha = c(0, 1, 0)),
                        start = 1, stop = 6*pi, step = 0.1, 
                        rate = 6,elementId = "player")))

y muchos más en http://gallery.htmlwidgets.org/

3. Compartir las apps creadas con Shiny

3. Compartir las apps creadas con Shiny…

de forma local, con alguien que tiene R en su ordenador.

  • runUrl(), runGitHub() o runGist()

de forma global, con todo el mundo (sin necesidad de tener R).

  • shinyapps.io
  • Shiny Server
  • RStudio Connect

Compartir apps Shiny

local

runUrl()

  • Comprimir la carpeta de la app en un zip y enlazar el archivo en una web
runUrl( "<link a la web>")

runGitHub()

  • Alojar tu app en tu repositorio libre de GitHub
runGitHub( "<nombre de tu repositorio>", "<tu nombre de usuario>") 

runGist()

  • Alojar tu app en tu repositorio libre de GitHub, manteniendo tu anonimato con Gist

  • Subir los archivos a Gist
  1. Gist nos dará una Url
  2. Los números finales de la Url son el código gist
runGist("código gist")

Compartir apps Shiny

global

shinyapps.io

Shiny Server

RStudio Connect

Comparativa características

4. MapEs (una app desarrollada por FISABIO - DG Salud Pública)

MapEs

Bibliografía y recursos